home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 June: Reference Library / Dev.CD Jun 99 RL Disk 1.toast / Technical Documentation / Macintosh Technotes and Q&As / technotes / tn / 1013_Printer_Direct_Mode.cw next >
Encoding:
Text File  |  1998-04-27  |  37.9 KB  |  479 lines  |  [TEXT/R*ch]

  1. —BOBO˚5˛d9
  2. 69.˚« ÿÿH˚4ΔªB=&M
  3. ÿÿ˚2Àÿ-Z    ÿÿÿFrederique Courard HaurixHHÚ(ÿáÿâùFG(üHHØ(d'`Δÿÿ˚Sà∫0/ÀÌˇ˚«˚¨≥˚¨˘ˇÌ@ÿfl˚VpÓæz ˚©4°ÿÿÿÿÿÿÿÿ0±Ü‘DSET&K'@6eKË˚7ø˚1,˚8(˚4•õ·˚4X!ªïõ·˚2*¬0õ·˚¨´)–≠õ·˚¨ø$Δ™õ·˚2,*°&'õ·˚©.°+˚õ·˚© 6®3◊õ·˚1ì
  4. ˛X L∏≤r”êëìíîï
  5. |˚
  6. g
  7. ⁄ V! Ê' fi!,Y!ã007u!a'k!@É0‹'!^Û0â!'6!µÕ0Ü'!™0√Ò! ≤! 0!!!!q'!r'!Ÿ!"c#Ù!$ÿ&M!'?!'@!'A8'd<'n)1<)<1⁄81ˆ!3!4x!4éH4ù!6e!    ≥àà®L
  8. ‰
  9. à¬π
  10. ≤
  11. 
  12. π
  13. ïÓ«
  14. 
  15. |Ó«˚
  16. ãì
  17.          
  18.     ∂    „
  19.         ˚
  20.     ˛    €
  21.     œ    ®
  22.     °    ·
  23.     ∏    Ã
  24.     É    Ò
  25.     Ó    Ù
  26. 
  27. g V
  28. # √$ ⁄
  29. % ‰$ ˇ
  30. % ·$ À
  31. % $ $
  32. % π$ Æ
  33. % Êà fi
  34. # â$ æ
  35. %$
  36. 
  37. %o$s
  38. %é$ò
  39. %$
  40. 
  41. %$
  42. %,Y
  43. #z$∞
  44. %ª$»
  45. %ãõ-÷.(027u
  46. #y$
  47. %⁄$¢
  48. %æ$ë
  49. %$
  50. %aàj
  51. )k
  52. #y$}
  53. %°$º
  54. %¿$Ë
  55. %@É2‹à
  56. )
  57. # $)
  58. %Q$Y
  59. %^Û2â!à5
  60. )6
  61. #:$?
  62. %µÕ2Üà
  63. )
  64. #"$'
  65. %⁄$
  66. %™2√Ò
  67. #Õ$à
  68. %õ$ü
  69. %8$@
  70. % ≤
  71. #Ù$á
  72. %2$:
  73. %o$y
  74. %Ÿ$
  75. %¬$´
  76. %Å$Ê
  77. % n$ v
  78. % Í$ ß
  79. %!$! 
  80. %!$$!'
  81. %!_$!g
  82. %!qà!‘
  83. )!Ÿ
  84. #!Œ$!˜
  85. %"!$"'
  86. %"-$"6
  87. %"Q$"Z
  88. %"c"x-"y
  89. "Ω."—
  90. "ª#Ù
  91. ##†$#è
  92. %#í$#ø
  93. %$($$3
  94. %$E$$K
  95. %$x$$∞
  96. %$$$ƒ
  97. %$¸$$¿
  98. %$ÿ&M
  99. #'AÓª'c    :'d     >'n)1     >)<)N-)P.)•0,-0..0_1⁄Óª1    :1ˆ
  100. #4é à–4ø     J4ù
  101. #‘û˚18û˜dtû‡˚¨ô øú˚3xòÿ˚3tñÏ˚ªøÀù˚ªô’é˚84¢ú˚«#˛ú˚«('ˆê˚«$+•ñ˚«</q˚ªì2•æ˚ªäû
  102. T E C H N O T E :
  103. Printer Direct Mode APIs
  104. for Macintosh Printer Drivers
  105. By Mike Blackstock, GDT Softworks, Inc. & Ben Manuto, Apple Engineering
  106. mike_blackstock@gdt.com
  107.   
  108.  
  109. This Technote describes the APIs for implementing a printer-direct (or pass-thru) mode for Macintosh printer drivers. Implementing this feature will allow applications to identify and send printer data that is unique to the printer connected to the Macintosh without having to generate QuickDraw codes, understand how to connect to and maintain a connection with a particular printer, or handle communications errors with the printer. 
  110. AppleÕs PC Compatibility systems present an interesting dilemma when trying to print from the DOS/Windows side of the CPU because all of the I/O of this system must occur through the Macintosh. DOS applications and Windows printer drivers generate native printer codes for specific printers, but do not generate the QuickDraw commands that Macintosh printer drivers depend on in order to image data to a specific printer. This printer direct mode will allow a Òback-doorÓ for these native printer commands to get directly to the printer through the Macintosh printer driver. 
  111. This Technote is directed towards printer driver developers who write drivers for non-PostScript printers. Implementing this feature will allow faster and better quality printing with AppleÕs PC Compatibility products, where printing must always occur on the Macintosh, even though the printer driver generating the printer commands may be on a DOS/Windows system.
  112. This document assumes you are familiar with the Macintosh Printing Manager and AppleÕs PC Compatibility products. See Inside Macintosh:Imaging with QuickDraw for further details on the Printing Manager.
  113.  
  114.  
  115.  
  116.  
  117.  
  118. About the Printer Direct Mode
  119. The printer direct (or pass-thru) mode is specifically intended to allow printer manufacturers and printer driver developers to make products that will easily integrate into the PC Compatibility CPU marketplace. Since most new printers ar‡e not being developed for a single CPU platform, the printer direct mode will give end-users the best printing results possible.
  120. Using the Printer Direct APIs
  121. The printer direct printer driver functions are implemented via a set of PrGeneral routines and a reserved opCode for those routines. There is a set of six functions (for which there are selectors) that the Macintosh printer driver must support:Open, Close, SendData, SendFile, Despool, and Verify. The PrGeneral opCode reserved by Apple for this operation is 20 decimal ($14 hex). Each of the five functions take a selector code as defined by these constants:
  122. #define kPrinterDirectOpCode                                20
  123. #define kPDOpenSelect                                1
  124. #define kPDSendDataSelect                                2
  125. #define kPDSendFileSelect                                5
  126. #define kPDCloseSelect                                3
  127. #define kPDDespoolSelect                                4
  128. #define kPDVerifySelect                                6
  129. If the driver does not support the printer direct opCode, the PrGeneral function should return a opNotImpl error. This is the one case where an error code will onúly be returned in the printer error (PrError). For all the rest of the functions, error codes need to be returned in the error field of the parameter block as well as the printing error variable (PrSetError). 
  130. Open Printer Direct
  131. The Open command alerts the printer driver that data is about to be sent and it should allocate whatever memory structures are needed to begin receiving the printer data. This printer data can be passed to the driver in one of two ways: 1) As a pointer to data blocks of a specific size, or 2) an FSSpec record which points to a spool file where the data is located. The appropriate selector code for Open command and an appropriate selector for the type of data to be sent to the driver must entered into the selector and spoolType fields of the OpenPDBlk. The spoolType valid values are:
  132. #define kPDData                1
  133. #define kPDFileSpec            2
  134. If any other value is set in the spoolType field, the function should return the pdBadSpoolTypeErr. The format of the parameter block is:
  135. struct OpenPDBlÿk {
  136.     SInt16 opCode;                    // Printer Direct opCode = 20
  137.     OSErr error;                    // Result code
  138.     UInt32 reserved;                    // reserved
  139.     UInt32 selector;                    // Function selector code
  140.     UInt32 jobID;                    // ID referencing this job
  141.     UInt32 spoolType;                    // Ptr to data or FSSpec.
  142. };
  143. typedef struct OpenPDBlk OpenPDBlk, *OpenPDBlkPtr;
  144. ERRORS
  145. opNotImpl,
  146. pdBadSelectorErr,
  147. pdBadJobIDErr,
  148. pdBadSpoolTypeErr
  149. The opCode is always 20 (kPrinterDirectOpCode). The error and reserved fields should be initialized to zero. The jobID is returned from the Open function and it is the calling functionÕs unique identifier to the print job being opened.
  150. Send Data
  151. There are two Send commands for sending the print job to the printer:SendPDData and SendFileSpec. For sending data, the driver must minimally be able to handle 4K data blocks which are repeatedly sent to the printer until all the data has been sent. However, more data can be sent if the driver can handle additional memory requirements. If the driver is not able to handle any data block lÏarger than 4K, an error must be appropriately returned by the printer driver. 
  152. struct SendPDDataBlk {
  153.     SInt16 opCode;                    // Printer Direct opCode = 20
  154.     OSErr error;                    // Result code
  155.     UInt32 reserved;                    // reserved
  156.     UInt32 selector;                    // Function selector code
  157.     UInt32 jobID;                    // ID referencing this job
  158.     Ptr Data;                    // Pointer to the data.
  159.     UInt32 count;                    // Number of bytes Data points to.
  160. };
  161. typedef struct SendPDDataBlk SendPDDataBlk, *SendPDDataBlkPtr;
  162. ERRORS
  163. opNotImpl,
  164. pdBadSelectorErr,
  165. pdBadJobIDErr,
  166. Memory Manager Errors
  167. Send File
  168. The Send File command is issued once and specifies a fileSpec for the location of the spooler file containing all of the print job data. This file must be in a closed state when it is passed to the driver. The printer driver is responsible for deleting the spool file when it is finished spooling the file to the printer.
  169. struct SendPDFileSpecBlk {
  170.     SInt16 opCode;                    // Printer Direct opCode = 20
  171.     OSErr error;                    // ùResult code
  172.     UInt32 reserved;                    // reserved
  173.     UInt32 selector;                    // Function selector code
  174.     UInt32 jobID;                    // ID referencing this job
  175.     FSSpec fileSpec;                    // Points to file where data is
  176. };
  177. typedef struct SendPDFileSpecBlk SendPDFileSpecBlk, 
  178.                                *SendPDFileSpecBlkPtr;
  179. ERRORS
  180. opNotImpl,
  181. pdBadSelectorErr,
  182. pdBadJobIDErr,
  183. File System Errors
  184. Close Printer Direct
  185. The Close commands tells the printer driver to stop receiving printer data and prepare the data to be spooled to the printer. 
  186. struct ClosePDBlk {
  187.     SInt16 opCode;                    // Printer Direct opCode = 20
  188.     OSErr error;                    // Result code
  189.     UInt32 reserved;                    // reserved
  190.     UInt32 selector;                    // Function selector code
  191.     UInt32 jobID;                    // ID referencing this job
  192. };
  193. typedef struct ClosePDBlk ClosePDBlk, *ClosePDBlkPtr;
  194. ERRORS
  195. opNotImpl,
  196. pdBadSelectorErr,
  197. pdBadJobIDErr
  198. Despool Print Job
  199. Once the Close command is completed, the printer driver will only dispatch the printer data once it has received the Despool command. Despooling can take place éeither in the foreground or the background, depending on the userÕs selection in the Chooser. 
  200. struct DespoolPDBlk {
  201.     SInt16 opCode;                                // Printer Direct opCode = 20
  202.     OSErr error;                                // Result code
  203.     UInt32 reserved;                                // reserved
  204.     UInt32 selector;                                // Function selector code
  205.     UInt32 jobID;                                // ID referencing this job
  206.     UniversalProcPtr idleProcPtr;                                // idleProc
  207. };
  208. typedef struct DespoolPDBlk DespoolPDBlk, *DespoolPDBlkPtr;
  209. ERRORS
  210. opNotImpl,
  211. iPrAbort,
  212. pdBadSelectorErr,
  213. pdBadJobIDErr,
  214. pdDespoolFailedErr,
  215. An idleProcPtr can be supplied for Despool function which the driver should execute periodically. The idleProc should be a function which takes no arguments and returns no values and should be of the form:
  216. pascal void MyIdleProc(void);
  217. The primary purpose of the idleProc is to sense events when a user is attempting to abort the print job. Should the idleProc sense this, it must set the printing error (via the PrSetError function) with the iPrAbort error. Otherúwise, the idleProc should return a noErr. The driver should check the error returned and abort the print job upon receiving the abort error. 
  218. Should the despool procedure be aborted, it should return the iPrAbort error. If the despool function should fail for any other reason, it should return the pdDespoolFailedErr so the calling application can prompt the user. 
  219. If the idleProc is nil, it is the printer driverÕs option to supply a default idleProc routine.
  220.  
  221. Verify Printer Direct Mode
  222. The Verify function allows an application to verify that the driver supports printer direct mode. If the driver does not support the printer direct opCode, the PrGeneral function should return an opNotImpl error. 
  223. struct VerifyPDBlk {
  224.     SInt16 opCode;                        // Printer Direct opCode = 20
  225.     OSErr error;                        // Result code
  226.     UInt32 reserved;                        // reserved
  227.     UInt32 selector;                        // Function selector code
  228.     OSType drvrCreator;                        // Printer driverÕs creator type
  229.     NumVersion drvrVersion;                        // Printer driverÕs version numberú
  230. };
  231. typedef struct VerifyPDBlk VerifyPDBlk, *VerifyPDBlkPtr;
  232. The drvrCreator and drvrVersion fields are returned by the printer driver. The drvrCreator is a 4 character OSType that is part of the driverÕs file info. The drvrVersion field is of type NumVersion which is defined in the Types.h file of the Macintosh headers. It is defined there as follows:
  233. struct NumVersion {
  234.     UInt8 majorRev;                        /*1st part of version number in BCD*/
  235.     UInt8 minorAndBugRev;                        /*2nd & 3rd part of version number 
  236.                              share a byte*/
  237.     UInt8 stage;                         /*stage code:dev, alpha, beta, final*/
  238.     UInt8 nonRelRev;                         /*revision level of non-released version*/
  239. };
  240. typedef struct NumVersion NumVersion;
  241. Based on the creator and version information, and any pertinent information in the printer record, it is up to the calling application to determine whether the printer data being sent to this driver would be handled properly by this printer.
  242.  
  243.  
  244. Summary of the Printer Direct APIs
  245. Constants
  246. #define kPrinterDirectOpCode                                20
  247.  
  248. ê#define kPDOpenSelect            1
  249. #define kPDSendDataSelect                                2
  250. #define kPDSendFileSelect                                3
  251. #define kPDCloseSelect                                4
  252. #define kPDDespoolSelect                                5
  253. #define kPDVerifySelect                                6
  254.  
  255. #define kPDNoData                                0
  256. #define kPDData                                1
  257. #define kPDFileSpec                                2
  258.  
  259. enum {
  260.     pdBadSelectorErr            = -10001,
  261.     pdBadSendModeErr            = -10002,
  262.     pdBadJobIDErr                            = -10003,
  263.     pdDespoolFailed                            = -10004
  264. };
  265. Data Types
  266. struct OpenPDBlk {
  267.     SInt16 opCode;                    // Printer Direct opCode = 20
  268.     OSErr error;                    // Result code
  269.     UInt32 reserved;                    // reserved
  270.     UInt32 selector;            // Function selector code
  271.     UInt32 jobID;                    // ID referencing this job
  272.     UInt32 spoolType;                    // Ptr to data or FSSpec.
  273. };
  274. typedef struct OpenPDBlk OpenPDBlk, *OpenPDBlkPtr;
  275.  
  276.  
  277. struct SendPDDataBlk {
  278.     SInt16 opCode;                    // Printer Direct opCode = 20
  279.     OSErr error;                    // Result code
  280.     UInt32 reserved;                    // reserved
  281.     UInt32 selector;                    // Function selector code
  282.     UInt32 jobID;                    // ID referencing this job
  283.     Ptr Data;            ñ        // Pointer to the data.
  284.     UInt32 count;                    // Number of bytes Data points to.
  285. };
  286. typedef struct SendPDDataBlk SendPDDataBlk, *SendPDDataBlkPtr;
  287.  
  288.  
  289. struct SendPDFileSpecBlk {
  290.     SInt16 opCode;                    // Printer Direct opCode = 20
  291.     OSErr error;                    // Result code
  292.     UInt32 reserved;                    // reserved
  293.     UInt32 selector;                    // Function selector code
  294.     UInt32 jobID;                    // ID referencing this job
  295.     FSSpec fileSpec;                    // Points to file where data is
  296. };
  297. typedef struct SendPDFileSpecBlk SendPDFileSpecBlk, 
  298.                                *SendPDFileSpecBlkPtr;
  299.  
  300.  
  301. struct ClosePDBlk {
  302.     SInt16 opCode;                    // Printer Direct opCode = 20
  303.     OSErr error;                    // Result code
  304.     UInt32 reserved;            // reserved
  305.     UInt32 selector;                    // Function selector code
  306.     UInt32 jobID;                    // ID referencing this job
  307. };
  308. typedef struct ClosePDBlk ClosePDBlk, *ClosePDBlkPtr;
  309.  
  310.  
  311. struct DespoolPDBlk {
  312.     SInt16 opCode;                                // Printer Direct opCode = 20
  313.     OSErr error;                                // Result code
  314.     UInt32 reserved;                        // reserved
  315.     UInt32 selector;                                // Function selector code
  316.     UInt32 jobID;                                            // ID referencing this job
  317.     UniversalProcPtr idleProcPtr;    // idleProc
  318. };
  319. typedef struct DespoolPDBlk DespoolPDBlk, *DespoolPDBlkPtr;
  320.  
  321.  
  322. struct VerifyPDBlk {
  323.     SInt16 opCode;                        // Printer Direct opCode = 20
  324.     OSErr error;                        // Result code
  325.     UInt32 reserved;                        // reserved
  326.     UInt32 selector;                        // Function selector code
  327.     OSType drvrCreator;                        // Printer driverÕs creator type
  328.     NumVersion drvrVersion;                        // Printer driverÕs version number
  329. };
  330. typedef struct VerifyPDBlk VerifyPDBlk, *VerifyPDBlkPtr;
  331. Summary
  332. The printer-direct mode for Macintosh printer drivers described in this Technote will be used by the PC Print Spooler application, which is part of AppleÕs new PC Compatibility System and should be relased in the first part of 1996. Tæhe PC Print Spooler application spools print jobs from the PC side of the CPU to the printer connected to the Macintosh and selected in the Chooser.
  333. The printer-direct mode will be implemented in PowerPrint 3.0.1 Classic and LT driver packages from GDT Softworks in February, 1996. This feature is also being considered in a future release of AppleÕs LaserWriter 8 driver. In addition, other third-party providers have shown interest in implementing this feature in their printer drivers in the future. 
  334. A caveat:Application developers should realize that this feature is currently not supported by AppleÕs drivers. 
  335. Acknowledgments
  336. Thanks to Ingrid Kelly, Guillermo Ortiz, and Dave Polaschek for reviewing this Technote. Special thanks to Tom Dowdy for reviewing the design and helping us think about the future compatibility. We would also like to thank Greg Manning, Gord Pawluik, Pierre Houston, and Dave Banks from GDT Softworks for their help in reviewing and contributing to this Technote.
  337. ZÿÿNõDSET≠ÿÿ.Hÿÿÿÿÿÿ˚50õ›b¯•õÿÿ6ÿÿ*b¯DSET4ÿÿ.H∂gltÿÿÿÿÿÿ˚¨ ¯·õÿÿ›§õÿÿà˜õÿÿ‹ Ωõÿÿ Àwõÿÿ°gõÿÿ WõÿÿΔGõÿÿ¸›õÿÿ¨àõÿÿ˘‹õÿÿ √ Àõÿÿx°õÿÿh õÿÿXΔõÿÿH•õÿÿ6ÿÿ*b¯DSET≠ÿÿ.H@ÿÿÿÿÿÿ˚«0?•I8õÿÿ∫    ÿÿ*?•Iõ8√õ8    √õ8
  338. √õ8 √õ8 √õ8
  339. √õ8√õ8DSETT≥≥@∫˚«P˚¨˛˚«˚¨`õ8˚3˘7(∑∫ "    à° }[ˇP[¥ΔWWl≤[¡‰
  340. Ω˚© Ω
  341.  
  342. Technote 1013        ///          Release 1.0       © 1996   Apple Computer, Inc.      ///              ///          Page  of  8
  343.  
  344. FNTMCUTSDSUM1Frederique Courard HauriHDNISTYL‘°ÿÿ@STYL˚1 ˚5´˚«\˚2@˚4ô˚3Δ˚¨¨˚¨¸#€ÿÿ6
  345. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  346. ÿÿÿÿ
  347. ÿÿÿÿ
  348. ÿÿÿÿ
  349. ÿÿÿÿÿÿÿÿÿÿ    ÿÿÿÿ        ÿÿÿÿÿÿ
  350.     ÿÿÿÿÿÿ)     ÿÿÿÿÿÿ ÿÿÿÿÿÿ
  351. ÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ    ÿÿÿÿÿÿ
  352. ÿÿ
  353. ÿÿÿÿ1    ÿÿÿÿÿÿÿÿ
  354. ÿÿ ≈!    ÿÿÿÿ#ÿÿ!ÿÿ2$ÿÿ!
  355. ÿÿ2%ÿÿ!ÿÿÿÿ'    ÿÿÿÿÿÿ)ÿÿ'ÿÿÿÿ-ÿÿÿÿÿÿ.ÿÿÿÿÿÿ
  356. 0    ÿÿ ÿÿÿÿ2ÿÿ0ÿÿ8    ÿÿÿÿÿÿ:ÿÿ8 ÿÿÿÿ <    ÿÿ!ÿÿÿÿ!>ÿÿ< ÿÿÿÿ"H    ÿÿ"ÿÿÿÿ#JÿÿH ÿÿÿÿ$    ÿÿ ÿÿÿÿ%ÿÿ!ÿÿÿÿ&ÿÿ"ÿÿÿÿ'
  357. ÿÿÿÿ( ÿÿÿÿ)ÿÿ        ÿÿ*ÿÿ
  358. 
  359. ÿÿ+ÿÿ  ÿÿ,ÿÿÿÿ  ÿÿ- ÿÿÿÿ 
  360. ÿÿ."ÿÿÿÿ ÿÿ%/&‹ÿÿÿÿÿÿ0(0&&ÿÿÿÿ1*0&&ÿÿÿÿ2+0&&ÿÿÿÿ3,0&*ÿÿÿÿ4/0&*ÿÿÿÿ510&*    ÿÿÿÿ630&*
  361. ÿÿÿÿ740&* ÿÿÿÿ850&* ÿÿÿÿ960&(
  362. ÿÿÿÿ:70&(ÿÿÿÿ;90&+ÿÿÿÿ<;0&+ÿÿÿÿ%==‹ÿÿÿÿÿÿ>?0==#ÿÿ1?@0==ÿÿ2@A0==ÿÿÿÿAB0=@ÿÿ4BC0=@ÿÿ5CD0=@    ÿÿ6DE0=@
  363. ÿÿ7EF0=@ ÿÿ8FG0=@ ÿÿÿÿGI0=?$ÿÿÿÿHK0=?%ÿÿÿÿIL0=A&ÿÿ<JM0=Aÿÿÿÿ%KN‹ÿÿÿÿÿÿLO0NN'ÿÿÿÿMP0NN(ÿÿÿÿNQ0NN(ÿÿÿÿOR0NP)ÿÿÿÿPS0NP*ÿÿÿÿQT0NP*    ÿÿÿÿRU0NP*
  364. ÿÿÿÿSV0NP* ÿÿÿÿTW0NP* ÿÿÿÿUX0NO+ÿÿÿÿVY0NO+ÿÿÿÿWZ0NQ)ÿÿÿÿX[0NQ*ÿÿÿÿ%Y\‹ÿÿÿÿÿÿZ]0\\,ÿÿÿÿ[^0\\ÿÿÿÿ\_0\\ÿÿÿÿ]`0\^-    ÿÿÿÿ^a0\^ÿÿÿÿ_b0\^     ÿÿÿÿ`c0\^!    ÿÿÿÿad0\^"    ÿÿÿÿbe0\^#    ÿÿÿÿcf0\].$
  365. ÿÿÿÿdg0\].%
  366. ÿÿÿÿeh0\_&    ÿÿÿÿfi0\_'ÿÿÿÿ%gj‹ÿÿÿÿ(ÿÿhk0jj/)ÿÿÿÿil0jj*ÿÿÿÿjm0jj+ ÿÿÿÿkn0jl,ÿÿÿÿlo0jl-ÿÿÿÿmp0jl.ÿÿÿÿnq0jl/ÿÿÿÿor0jl0ÿÿÿÿps0jl1ÿÿÿÿqt0jk06
  367. ÿÿÿÿru0jk07
  368. ÿÿÿÿsv0jm&4
  369. ÿÿÿÿtw0jm5
  370. ÿÿÿÿux‹ÿÿÿÿ(ÿÿvy0xx) ÿÿiwz0xx*ÿÿÿÿx{0xx2ÿÿÿÿy|0xz,ÿÿÿÿz}0xz3ÿÿÿÿ{~0xz8ÿÿÿÿ|0xz9ÿÿÿÿ}•0xz:ÿÿÿÿ~™0xy16
  371. ÿÿÿÿ≠0x{<ÿÿÿÿ•∞‹ÿÿÿÿ ;ÿÿ™≥0∞∞2=ÿÿÿÿ≠∑0∞∞ >ÿÿÿÿ∞∫0∞∑  ÿÿÿÿ≥Ω0∞∑ !ÿÿÿÿ∑√0∞∑ "ÿÿÿÿ∫≈0∞∑ #ÿÿÿÿΩ…0∞≥3Aÿÿÿÿ√—0∞≥3Bÿÿÿÿ≈‘Øÿÿÿÿ     ÿÿ…Ÿ8‘‘ 
  372. ÿÿÿÿ—⁄8‘‘ 
  373. ÿÿÿÿ‘∂8‘‘ ÿÿÿÿŸΔ8‘‘ ÿÿÿÿ⁄Œ8‘‘ ÿÿÿÿ∂‚8‘‘ ÿÿÿÿΔ„8‘‘ ÿÿÿÿŒ‰8‘‘ ÿÿÿÿ‚8‘‘ ÿÿÿÿ„ˆ8‘‘ #ÿÿÿÿ‰˜8‘‘ $ÿÿÿÿ˘8‘‘ %ÿÿÿÿˆ˙Øÿÿÿÿ4&ÿÿ˜˚8˙˙5'ÿÿÿÿ˘˝8˙˙6(ÿÿÿÿ˙˛8˙˙7)ÿÿÿÿ˚ˇ8˙˙8*ÿÿÿÿ˝ı8˙˙8+ÿÿÿÿ˛ƒ8˙˙8,ÿÿÿÿˇ 8˙˙8-ÿÿÿÿı¡8˙˙8.ÿÿÿÿƒ¢8˙˙8/ÿÿÿÿ £8˙˙80ÿÿÿÿ ¡€Øÿÿÿÿ 1ÿÿ¢¥8€€ 2ÿÿÿÿ£œ8€€ 3ÿÿÿÿ€§8€€ 4ÿÿÿÿ¥¨8€€ 5ÿÿÿÿœ©8€€ 6ÿÿÿÿ§«:ÿÿÿÿ¨
  374. '9ÿÿ§©ª8:ÿÿÿÿª¬ÿÿ;ÿÿÿÿ«–H<ÿÿÿÿ¬®ÿÿ =ÿÿÿÿ–    ÿÿ7ÿÿÿÿ®°ÿÿ>7ÿÿÿÿ¯
  375. ÿÿÿÿʃÿÿHASH‘
  376. $Ú àù)ô◊‘gôؑuÑÛÔ=ÑÛÔKà"ÔÎ-á´fiãã%8◊•ãµÕáYêä'ëå+&
  377. 
  378. « ¨    &
  379.         ø©¯,¯,!
  380. ¯,2° !ª°,
  381. ÷b&øA %øB¬, `b $`c
  382. ,¢Q£v€˝¥Àœ,…Q—v‘˝Ÿ¥6À⁄å∂. 
  383. Δ/ŒT‚y„ı‰Ã,8˜QI˘v4˙˝5˚À5˝å5˛    
  384. 5ˇ    /5ı    T5ƒ    y5 ?BCDEFJ0;OcPdC9U:øG H    0Q    1R    2S    3TC~JqKr    (M
  385. GI    5Ay·Wy˝UÙ?VÙ    HXù3ù@ùBOù    $Nù    3P‡JZ‡>0‡ Ehÿ>vLï>≠-_.`/a0bFe`]/m0n1o2p0tJs&^.f
  386. "[
  387. #\
  388. $w
  389. %x∑∫∞≥*Ω…”√ûH‡/l‡9|‡:}‡1y‡7z‡8{‡Dkfl0™'j®>د>د¯>Ù°>Ù·.# & "˜>Øu1!Ö)  ]*≤* ∑+æ& A& –A
  390. 7®L: Qf¸egˆh“çm.h’ÑÚj–◊alq”º(r§él,r”◊a*t“◊Å¡z«áoz¶ÕÄ/}Bod}©ÓÖ≈?ÿÿ
  391. CHAR˚4$ÿÿÿÿÿ ÿÿ ÿÿÿú    ÿÿÿfl 
  392. ÿÿ ÿÿÿû
  393. ÿÿ•ÿÿ ÿóàÿÿÿúÿÿ
  394. ÿòÓ'ÿØ
  395. ÿÿÿ÷ àÿÿÿÿÿÿÿÿ
  396. ÿÿ"
  397. ÿÿÿÿ(
  398. '
  399. ÿÿ%
  400. ÿÿ
  401. ÿÿÿéÿÿ"ÿ† ÿÿÿflÿÿ ÿÿÿÿ
  402. ÿÿÿÿ
  403. ÿÿ&ÿÿ
  404. ÿÿ ÿÿ    ÿÿ ÿÿ
  405. ÿÿÿÿÿÿÿÿ ÿÿ     ÿÿ ÿÿàÿÿÿÿÿÿ     #
  406.     ÿÿ
  407.     ÿÿ
  408.     ÿÿ.    ÿÿ
  409.     ÿÿ
  410. (
  411. 
  412.     '/    ÿÿ*
  413. 2
  414. ,/
  415. ÿÿ        /        
  416. ÿÿ2ÿÿ&    ÿÿ&ÿÿ  ÿÿ&
  417. 4&    ÿÿà    ÿÿÓÿÿÿ÷
  418. à ÿÿ àÿÿ ÿ÷àÿÿÿÿ"    à,ÿÿHASH 3071845E6≥"13:+;.D-$)%*)    *    )0    *&     
  419. à <à
  420. 9è8>
  421. 
  422. " 1         Ó:à=à!à ; 
  423.  RC?
  424. CELL˚ªüÿÿÿÿÿ3ÿÿÿ"ÿÿÿÿü
  425. ÿÿÿÿø
  426. ÿÿøÿÿÿÿÿÿÿÿÿÿ    ÿÿü
  427. ÿÿü
  428. ÿÿø
  429. ÿÿø
  430. ÿÿü
  431. ÿÿÿÿü
  432. ÿÿü
  433. ÿÿøÿÿøøÿÿÿÿÿÿÿÿx≥
  434. ÿÿØ$ ÿÿx• ÿÿØ 
  435. ÿÿÿÿÿÿÿÿÿÿ    ÿÿø
  436. ÿÿø ÿÿ ÿÿ
  437. ÿÿÿÿøÿÿÿÿûÿÿøÿÿøÿÿÿÿÿÿÿÿ    ÿÿÿÿøÿÿÿ ÿÿÿ
  438. ÿÿü
  439. ÿÿü ÿÿøÿÿøÿÿø    ÿÿÿÿø ÿÿø
  440. ÿÿ@ÿÿÿÿø
  441. ÿÿÿÿÿÿø ÿÿ(Ó
  442. ÿÿ√s Δ@ÿÿHASHÿ    
  443.       
  444. $ %
  445. 67(xŸx∂Ø1Ø3øøø    ø
  446. ø
  447. )ü ü >     
  448. ! " #&'
  449. ./01
  450. 45;*2*èA…‘Bú=ú
  451. -ú,ú<ú3ú8ú9ú:‡    + Æÿÿ
  452. GRPH˚«ÿÿÿÿÿ3ÿÿÿBÿÿÎÿÿ
  453. ÿÿÎÿÿ
  454. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿ|ÿÿHASH
  455.     Ò
  456. Î   ¶8ÿÿl
  457. RULR˚2ÿÿÿÿÿÿÿÿÿ‡@ÿÿ[ÿÿ $ÿÿÿªB=ÿÿ $ÿÿ     $ÿÿ    ÿbBÿÿÿÿ$ÿÿÿ˚ÿÿiÿªB<ÿÿHÿÿÿbC  V.j.}.Δ.£.¶.Ê.†.›...*.=.P.c.v.….ˇ.¯10¯ÿÿlÿÿΔÿÿ´ÿÿÿzÿÿÿªB<ÿÿØÿÿÿRÿÿiÿªB=ÿÿüÿÿiÿbBÿÿ ÿÿÿjÿÿaÿ˚ÿÿDÿÿÿjBÿÿéÿbC  V.j.}.Δ.£.¶.Ê.†.›...*.=.P.c.v.….ˇ.¯10¯ÿÿaÿzÿÿaÿRÿÿaÿjÿÿiÿjBÿÿ    hÿÿ
  458. ‘ÿÿ °ÿÿÿÿ$ÿÿHÿÿlÿÿΔÿÿ´ÿÿØÿÿüÿÿ ÿÿDÿÿ    hÿÿÿÿ$ÿÿHÿÿlÿÿΔÿÿ´ÿÿÿ@`8ÿÿHASHÿœî>î?W> W?ÿ1,20Q3v4˝5À60    ˛
  459.  ‡
  460. ,
  461. Q
  462. v˝Àå&
  463. /Ty#ı$Ã%,'Q(v)˝*À+å,    
  464. -    /.    T/    y0
  465. 0¥Í®"⁄ÍlÍ!Tµ |†@ÿ7@‡r±¯LKUP    '
  466. (¯–) *
  467. $%¨&+,-./0123456789:;< =!>?@ABCDEF"G#HIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~•™≠∞≥∑∫Ω√≈…—‘Ÿ⁄∂ΔŒ‚„‰ˆ˜˘˙˚˝˛ˇıƒ ¡¢£€¥œ©§ª«¬ÿÿ®‰ÿÿ$NAMEDefault
  468. Default SSHeaderBodyFooterFootnoteFootnote Index
  469. HeadingH2.H2 Code.CV Heading1.H1Italic HeadingH3.H3Bullet     Checklist"Number&Classic= Blue Gray 1N Blue Gray 2\Colorfulj
  470. 3D Table 1x
  471. 3D Table 2∞
  472. Accounting‘Harvard˙Legal€Diamond¨DFNTM    HelveticaGenevaÿÿGenevaPalatino:H
  473. Letter GothicCourierETBL@FNTMPBCUTSPJDSUMPRHDNIP—STYLPETBL˜1ÿfl‡üûúùø›ñòóôõö÷
  474.